package mx.edu.itschapala.ssrp.bean;

import java.io.ByteArrayInputStream;
import java.io.IOException;
import java.io.InputStream;
import java.io.Serializable;
import java.util.ArrayList;
import java.util.List;
import java.util.logging.Level;
import java.util.logging.Logger;
import javax.ejb.EJB;
import javax.enterprise.context.ApplicationScoped;
import javax.faces.application.FacesMessage;
import javax.faces.context.ExternalContext;
import javax.faces.context.FacesContext;
import javax.faces.event.ActionEvent;
import javax.faces.model.SelectItem;
import javax.inject.Named;
import mx.edu.itschapala.connect.modelo.MaestroConnect;
import mx.edu.itschapala.ssrp.ln.CatalogoLN;
import mx.edu.itschapala.ssrp.ln.ConnectLN;
import mx.edu.itschapala.ssrp.modelo.AsignacionAsesor;
import mx.edu.itschapala.ssrp.modelo.Empresa;
import mx.edu.itschapala.ssrp.modelo.IntegranteResidencia;
import mx.edu.itschapala.ssrp.modelo.Proyecto;
import mx.edu.itschapala.ssrp.modelo.Usuario;
import mx.edu.itschapala.ssrp.util.Mail;
import mx.edu.itschapala.ssrp.util.PasswordGenerator;
import org.apache.commons.io.IOUtils;
import org.primefaces.event.CloseEvent;
import org.primefaces.event.FileUploadEvent;
import org.primefaces.event.FlowEvent;
import org.primefaces.model.DefaultStreamedContent;
import org.primefaces.model.StreamedContent;
import org.primefaces.model.UploadedFile;

@Named(value = "proyectoEmpresaBean")
@ApplicationScoped
public class ProyectoEmpresaBean implements Serializable {
    
    @EJB
    private ConnectLN connectLN;
    
    @EJB
    private CatalogoLN catalogoLN;
    
    private List<Proyecto> proyectos;
    private Proyecto proyecto;
    private AsignacionAsesor asesor;
    private String accion;
    private Empresa empresa;
    private String user;
    private UploadedFile file;
    private String maestro;
    private StreamedContent fileD;
    private final PasswordGenerator pw = new PasswordGenerator();
    private final Mail m = new Mail();
    private List<Empresa> empresas;
    private Usuario usuario;
    private String accionEmp;
    private String correoAlumnos;
    private String nomAlumnos;
    private List<String> correos;
    private String observaciones;
    private List<String> carreras;
    private boolean est = true;
    private String archivoNombre;
    
    public ProyectoEmpresaBean() {
    }

//Proyecto
    public void handleFileUpload(FileUploadEvent event) {
        file = event.getFile();
        archivoNombre = file.getFileName();
        mensajeUsuario(new FacesMessage(FacesMessage.SEVERITY_INFO, "ARCHIVO CARGADO", "EL ARCHIVO FUE CARGADO CORRECTAMENTE"));
    }
    
    public String getFileName() {
        return archivoNombre;
    }
    
    public String cargarAnteproyecto() {
        try {
            proyecto.setStatus('a');
            byte[] foto = IOUtils.toByteArray(file.getInputstream());
            
            proyecto.setAnteproyecto(foto);
            
            catalogoLN.actualizarProyecto(proyecto);
            archivoNombre = "";
            mensajeUsuario(new FacesMessage(FacesMessage.SEVERITY_INFO, "ANTEPROYECTO GUARDADO", "EL ANTEPROYECTO FUE GUARDADO CORRECTAMENTE"));
        } catch (IOException ex) {
            Logger.getLogger(ProyectoEmpresaBean.class.getName()).log(Level.SEVERE, null, ex);
            archivoNombre = "";
            mensajeUsuario(new FacesMessage(FacesMessage.SEVERITY_ERROR, "ERROR AL CARGAR ANTEPROYECTO", "EL ANTEPROYECTO NO FUE GUARDADO"));
            
        } finally {
            
            return "indexAlumno";
            
        }
        
    }
    
    public void seleccionarProyecto(ActionEvent evt) {
        String idtemp = evt.getComponent().getClientId();
        int id = Integer.parseInt(idtemp.split(":")[2]);
        proyecto = proyectos.get(id);
    }
    
    public void editarStatus(ActionEvent evt) {
        String idtemp = evt.getComponent().getClientId();
        System.out.println(idtemp);
        int id = Integer.parseInt(idtemp.split(":")[2]);
        proyecto = proyectos.get(id);
        proyecto.setStatus('r');
        catalogoLN.editarProyecto(proyecto);
        accion = "";
    }
    
    public String prepararNuevoProyecto(ActionEvent evt) {
        String idtemp = evt.getComponent().getClientId();
        int id = Integer.parseInt(idtemp.split(":")[2]);
        accion = "nuevo";
        proyecto = new Proyecto();
        proyecto.setEmpresa(empresas.get(id));
        return "ProyectoCrearEditar";
    }
    
    public void procesarArchivo(ActionEvent e) {
        String idtemp = e.getComponent().getClientId();
        int id = Integer.parseInt(idtemp.split(":")[2]);
        proyecto = proyectos.get(id);
        InputStream is = new ByteArrayInputStream(proyecto.getAnteproyecto());
        fileD = new DefaultStreamedContent(is, "application/pdf", "anteproyecto " + proyecto.getNombre() + ".pdf");
    }
    
    public void procesarArchivoInfo(ActionEvent e) {
        InputStream is = new ByteArrayInputStream(proyecto.getAnteproyecto());
        fileD = new DefaultStreamedContent(is, "application/pdf", "anteproyecto " + proyecto.getNombre() + ".pdf");
    }
    
    public StreamedContent getFileD() {
        return fileD;
    }
    
    public void prepararEditarProyecto(ActionEvent evt) {
        accion = "editar";
        String idtemp = evt.getComponent().getClientId();
        int id = Integer.parseInt(idtemp.split(":")[2]);
        proyecto = proyectos.get(id);
        
        if (user.equals("division")) {
            asesor = new AsignacionAsesor();
        }
    }
    
    public void prepararAsesor(ActionEvent evt) {
        
        asesor = new AsignacionAsesor();
    }
    
    public void prepararUnirse(ActionEvent evt) {
        accion = "agregar";
        String idtemp = evt.getComponent().getClientId();
        int id = Integer.parseInt(idtemp.split(":")[2]);
        proyecto = proyectos.get(id);
    }
    
    public void prepararRemoverProyecto(ActionEvent evt) {
        accion = "remover";
        String idtemp = evt.getComponent().getClientId();
        int id = Integer.parseInt(idtemp.split(":")[2]);
        proyecto = proyectos.get(id);
    }
    
    public void mensajeUsuario(FacesMessage mensaje) {
        FacesContext.getCurrentInstance().addMessage(null, mensaje);
        
    }
    
    public void prepararEditProy(ActionEvent e) {
        accion = (String) e.getComponent().getAttributes().get("accion");
        proyecto = (Proyecto) e.getComponent().getAttributes().get("proyecto");
        
    }
    
    public void prepararEditEmp(ActionEvent e) {
        accionEmp = (String) e.getComponent().getAttributes().get("accionEmp");
        empresa = (Empresa) e.getComponent().getAttributes().get("empresa");
        
    }
    
    public String procesarAccionProyecto() {
        
        Usuario logueado = getLogueado();
        user = logueado.getPerfil();
        
        switch (accion) {
            case "nuevo":
                proyecto.setStatus('p');
                
                if (user.equals("alumno")) {
                    
                    proyecto.setSeleccion("propio");
                    
                    proyecto.setAsesorExterno(proyecto.getAsesorExterno().toUpperCase());
                    proyecto.setDescripcion(proyecto.getDescripcion().toUpperCase());
                    proyecto.setNombre(proyecto.getNombre().toUpperCase());
                    proyecto.setPuestoAsesor(proyecto.getPuestoAsesor().toUpperCase());
                    catalogoLN.crearProyecto(proyecto);
                    proyecto = catalogoLN.buscarProyecto(proyecto);
                    catalogoLN.asignarProyecto(logueado, proyecto);
                } else {
                    proyecto.setSeleccion("banco");
                    
                    proyecto.setAsesorExterno(proyecto.getAsesorExterno().toUpperCase());
                    proyecto.setDescripcion(proyecto.getDescripcion().toUpperCase());
                    proyecto.setNombre(proyecto.getNombre().toUpperCase());
                    proyecto.setPuestoAsesor(proyecto.getPuestoAsesor().toUpperCase());
                    catalogoLN.crearProyecto(proyecto);
                }
                /*
                 proyecto.setAsesorExterno(proyecto.getAsesorExterno().toUpperCase());
                 proyecto.setDescripcion(proyecto.getDescripcion().toUpperCase());
                 proyecto.setNombre(proyecto.getNombre().toUpperCase());
                 proyecto.setPuestoAsesor(proyecto.getPuestoAsesor().toUpperCase());
                 catalogoLN.crearProyecto(proyecto);
                 if (user.equals("alumno")) {
                 proyecto = catalogoLN.buscarProyecto(proyecto);
                 catalogoLN.asignarProyecto(logueado, proyecto);
                 }*/
                mensajeUsuario(new FacesMessage(FacesMessage.SEVERITY_INFO, "PROYECTO AGREGADO", "EL PROYECTO FUE AGREGADO CORRECTAMENTE"));
                break;
            case "editar":
                if (user.equals("division") || user.equals("academia")) {
                    if (catalogoLN.getUsuarioPorID(maestro) == null) {
                        Usuario u = new Usuario();
                        MaestroConnect ma = connectLN.getMaestroPorId(maestro);
                        u.setNcontrol(maestro);
                        u.setCorreo(ma.getCorrreo());
                        u.setPassword(pw.pasword());
                        u.setPerfil("docente");
                        u.setNombre(ma.getNombre() + " " + ma.getApellidoP() + " " + ma.getApellidoM());
                        u.setAcademia(ma.getCarrera());
                        catalogoLN.crearUsuario(u);
                        asesor.setProyecto(proyecto);
                        asesor.setAsesorInterno(maestro);
                        catalogoLN.asignarAsesor(asesor);
                        List<String> correoAlumnos = new ArrayList<>();
                        for (IntegranteResidencia alumno : catalogoLN.getIntegrantesPorProyecto(proyecto)) {
                            correoAlumnos.add(catalogoLN.getUsuarioPorID(alumno.getAlumno()).getCorreo());
                        }
                        m.correo(ma.getCorrreo(), "A sido asignado al proyecto " + proyecto.getNombre(), "Usted a sido asignado como asedor del proyecto " + proyecto.getNombre() + " para dar apoyo en este proyecto");
                        m.correos(correoAlumnos, "Se le a asignado un asesor su proyecto", "Su proyecto cuenta como asesor a " + connectLN.getMaestroPorId(maestro).getNombre() + " " + connectLN.getMaestroPorId(maestro).getApellidoP() + " " + connectLN.getMaestroPorId(maestro).getApellidoM());
                        mensajeUsuario(new FacesMessage(FacesMessage.SEVERITY_INFO, "EL ASESOR FUE AGREGO", "Se agrego correctamente"));
                    } else {
                        Usuario u = catalogoLN.getUsuarioPorID(maestro);
                        asesor.setProyecto(proyecto);
                        asesor.setAsesorInterno(maestro);
                        catalogoLN.asignarAsesor(asesor);
                        m.correo(u.getCorreo(), "A sido asignado al proyecto " + proyecto.getNombre(), "Usted a sido asignado como asedor del proyecto " + proyecto.getNombre() + " para dar apoyo en este proyecto");
                        m.correo(u.getCorreo(), "Se le a asignado un asesor su proyecto", "Su proyecto cuenta con un asesor que es " + connectLN.getMaestroPorId(maestro).getNombre() + " " + connectLN.getMaestroPorId(maestro).getApellidoP() + " " + connectLN.getMaestroPorId(maestro).getApellidoM());
                        mensajeUsuario(new FacesMessage(FacesMessage.SEVERITY_INFO, "EL ASESOR FUE AGREGO", "Se agrego correctamente"));
                    }
                    
                } else {
                    proyecto.setEmpresa(empresa);
                    catalogoLN.editarProyecto(proyecto);
                    mensajeUsuario(new FacesMessage(FacesMessage.SEVERITY_INFO, "PROYECTO ACTUALIZADO", "EL PROYECTO FUE ACTUALIZADO CORRECTAMENTE"));
                }
                break;
            case "remover":
                catalogoLN.removerIntegrantesDeProyecto(catalogoLN.getIntegrantesPorProyecto(proyecto));
                catalogoLN.removerAsesorsDeProyecto(catalogoLN.getProyectosAsesorPorID(proyecto.getId() + ""));
                catalogoLN.removerProyecto(proyecto);
                mensajeUsuario(new FacesMessage(FacesMessage.SEVERITY_INFO, "PROYECTO REMOVIDO", "EL PROYECTO FUE REMOVIDO CORRECTAMENTE"));
                break;
            
            case "agregar":
                if (catalogoLN.getIntegranteResidenciaPorAlumno(logueado.getNcontrol()) == null) {
                    IntegranteResidencia i = new IntegranteResidencia();
                    i.setAlumno(logueado.getNcontrol());
                    i.setProyecto(proyecto);
                    catalogoLN.crearIntegranteResidencia(i);
                    mensajeUsuario(new FacesMessage(FacesMessage.SEVERITY_INFO, "AGREGADO AL PROYECTO", "FUE AGREGADO AL PROYECTO CORRECTAMENTE"));
                } else {
                    mensajeUsuario(new FacesMessage(FacesMessage.SEVERITY_INFO, "ERROR AL UNIRSE", "USTED YA ES INTEGRANTE DE OTRO PROYECTO"));
                }
                break;
            case "editarSP":
                catalogoLN.editarProyecto(proyecto);
                mensajeUsuario(new FacesMessage(FacesMessage.SEVERITY_INFO, "PROYECTO ACTUALIZADO", "EL PROYECTO FUE ACTUALIZADO CORRECTAMENTE"));
                break;
        }
        if (user.equals("alumno")) {
            return "indexAlumno";
        } else {
            return "ProyectoLista";
        }
        
    }
    
    public void limpiarProyecto(CloseEvent event) {
        proyecto = null;
    }
    
    public List<SelectItem> getEmpresasItem() {
        List<SelectItem> items = new ArrayList<>();
        for (Empresa e : catalogoLN.getEmpresas()) {
            items.add(new SelectItem(e, e.getNombre()));
        }
        
        return items;
    }
    
    public List<SelectItem> getMaestroItem() {
        List<SelectItem> maestros = new ArrayList<>();
        for (MaestroConnect m : connectLN.getAllMaestros()) {
            maestros.add(new SelectItem(m.getClave(), m.getNombre() + " " + m.getApellidoP() + " " + m.getApellidoM()));
        }
        return maestros;
    }
    
    public List<SelectItem> getStatusItems() {
        List<SelectItem> statusItems = new ArrayList<>();
        statusItems.add(new SelectItem("r", "Residencia"));
        statusItems.add(new SelectItem("p", "Proyecto"));
        statusItems.add(new SelectItem("a", "Anteproyecto"));
        statusItems.add(new SelectItem("pv", "Por Validar"));
        
        return statusItems;
    }
    
    public void prepararAnteproyecto(ActionEvent e) {
        
        String nControl = getLogueado().getNcontrol();
        proyecto = catalogoLN.getProyectoPorAlumno(nControl);
        
    }
    
    public String actualizarProyecto() {
        proyecto.setStatus('c');
//        cargarArchivo();
        catalogoLN.actualizarProyecto(proyecto);
        
        catalogoLN.asignarProyecto(getLogueado(), proyecto);
        return "indexAlumno";
    }
    
    public void prepararCorreos(Proyecto p) {

        //System.out.println(">>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>Llego");
        //proyecto=(Proyecto)e.getComponent().getAttributes().get("Proyecto");
        proyecto = p;
        correos = new ArrayList<>();
        correoAlumnos = "";
        nomAlumnos = "";
        for (IntegranteResidencia i : catalogoLN.getIntegrantesPorProyecto(proyecto)) {
            correoAlumnos += catalogoLN.getUsuarioPorID(i.getAlumno()).getCorreo() + ", ";
            nomAlumnos += catalogoLN.getUsuarioPorID(i.getAlumno()).getNombre() + ", ";
            correos.add(catalogoLN.getUsuarioPorID(i.getAlumno()).getCorreo());
        }
        correoAlumnos = correoAlumnos.substring(0, correoAlumnos.lastIndexOf(", "));
        nomAlumnos = nomAlumnos.substring(0, nomAlumnos.lastIndexOf(", "));
        System.out.println(">>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>" + correoAlumnos);
    }
    
    public String getCorreoAlumnos() {
        return correoAlumnos;
    }
    
    public void setCorreoAlumnos(String correoAlumnos) {
        this.correoAlumnos = correoAlumnos;
    }
    
    public String getNomAlumnos() {
        return nomAlumnos;
    }
    
    public void setNomAlumnos(String nomAlumnos) {
        this.nomAlumnos = nomAlumnos;
    }
    
    public String getObservaciones() {
        return observaciones;
    }
    
    public void setObservaciones(String observaciones) {
        this.observaciones = observaciones;
    }
    
    public void proyectoAceptado() {
        m.correos(correos, "Su proyecto a sido aceptato para residencias", observaciones);
        proyecto.setStatus('r');
        catalogoLN.editarProyecto(proyecto);
    }
    
    public void proyectoRechasado() {
        m.correos(correos, "Su proyecto a sido rechazado para residencias", observaciones);
        /*proyecto.setStatus('r');
         catalogoLN.editarProyecto(proyecto);*/
    }
    
    public void nuevoProyConEmprs(ActionEvent evt) {
        accion = "nuevo";
        proyecto = new Proyecto();
        String idtemp = evt.getComponent().getClientId();
        int id = Integer.parseInt(idtemp.split(":")[2]);
        proyecto.setEmpresa(catalogoLN.getEmpresas().get(id));
    }

//    ok
    public List<Proyecto> getBancoProyectos() {
        
        Usuario logueado = getLogueado();
        user = logueado.getPerfil();
        proyectos = new ArrayList<>();
        switch (user) {
            case "alumno":
                proyectos = catalogoLN.getBancoProyectos();
                
                break;
            case "division":
                proyectos = catalogoLN.getProyectos();
                break;
            case "vinculacion":
                proyectos = catalogoLN.getProyectos();
                break;
            case "academia":
                proyectos = catalogoLN.getProyectos();
                
                break;
            case "docente":
                List<AsignacionAsesor> listaAsesor = catalogoLN.getProyectosAsesorPorID(logueado.getNcontrol());
                for (AsignacionAsesor aa : listaAsesor) {
                    proyectos.add(aa.getProyecto());
                }
                break;
        }
        
        return proyectos;
    }
    
    public Proyecto getProyecto() {
        return proyecto;
    }
    
    public void setProyecto(Proyecto proyecto) {
        this.proyecto = proyecto;
    }
    
    public String getAccion() {
        return accion;
    }
    
    public void setAccion(String accion) {
        this.accion = accion;
    }

//    public String getNombreEmpresa() {
//        return catalogoLN.getEempresaPorID(empresa).getNombre();
//    }
    //Alumno / Profesor
    public AsignacionAsesor getAsesor() {
        return asesor;
    }
    
    public void setAsesor(AsignacionAsesor asesor) {
        this.asesor = asesor;
    }
    
    public String agregarAspirante() {
        
        catalogoLN.asignarProyecto(getLogueado(), proyecto);
        return "indexAlumno";
    }
    
    public String getMaestro() {
        return maestro;
    }
    
    public void setMaestro(String a) {
        this.maestro = a;
    }

    //Usuario
    public void prepararUsuario(ActionEvent evt) {
        String idtemp = evt.getComponent().getClientId();
        int id = Integer.parseInt(idtemp.split(":")[2]);
        proyecto = proyectos.get(id);
        List<IntegranteResidencia> Integrantes = catalogoLN.getPorProyecto(proyecto);
        //usuario=catalogoLN.
    }
    
    private Usuario getLogueado() {
        ExternalContext externalContext = FacesContext.getCurrentInstance().getExternalContext();
        return (Usuario) externalContext.getSessionMap().get("USUARIO_LOGUEADO");
    }
    
    public String getUser() {
        user = getLogueado().getPerfil();
        return user;
    }

    //Empresa
    public List<Empresa> getEmpresas() {
        empresas = catalogoLN.getEmpresas();
        return empresas;
    }
    
    public Empresa getEmpresa() {
        return empresa;
    }
    
    public void setEmpresa(Empresa empresa) {
        this.empresa = empresa;
    }
    
    public void seleccionarEmpresa(ActionEvent evt) {
        String idtemp = evt.getComponent().getClientId();
        int id = Integer.parseInt(idtemp.split(":")[2]);
        empresa = empresas.get(id);
    }
    
    public String prepararNuevoEmpresa(ActionEvent evt) {
        accionEmp = "nuevo";
        accion = "nuevo";
        empresa = new Empresa();
        proyecto = new Proyecto();
        return "EmpresaCrearEditar";
    }
    /*
     public void prepararEditarEmpresa(ActionEvent evt) {
     accion = "editar";
     String idtemp = evt.getComponent().getClientId();
     int id = Integer.parseInt(idtemp.split(":")[2]);
     empresa = empresas.get(id);
     }

     public void prepararRemoverEmpresa(ActionEvent evt) {
     accion = "remover";
     String idtemp = evt.getComponent().getClientId();
     int id = Integer.parseInt(idtemp.split(":")[2]);
     empresa = empresas.get(id);
     }*/
    
    public String procesarAccionEmpresa() {
        Usuario logueado = getLogueado();
        user = logueado.getPerfil();
        switch (accionEmp) {
            case "nuevo":
                empresa.setCiudad(empresa.getCiudad().toUpperCase());
                empresa.setColonia(empresa.getColonia().toUpperCase());
                empresa.setDomicilio(empresa.getDomicilio().toUpperCase());
                empresa.setFirmaAcuerdo(empresa.getFirmaAcuerdo().toUpperCase());
                empresa.setMision(empresa.getMision().toUpperCase());
                empresa.setNombre(empresa.getNombre().toUpperCase());
                empresa.setNombreTitular(empresa.getNombreTitular().toUpperCase());
                empresa.setPuestoAcuerdo(empresa.getPuestoAcuerdo().toUpperCase());
                empresa.setRfc(empresa.getRfc().toUpperCase());
                catalogoLN.crearEmpresa(empresa);
                empresa = catalogoLN.getEmpresa(empresa);
                proyecto.setEmpresa(empresa);
                mensajeUsuario(new FacesMessage(FacesMessage.SEVERITY_INFO, "EMPRESA GUARDADA", "LA EMPRESA SE GUARDO CORRECTAMENTE"));
                break;
            case "editar":
                empresa.setCiudad(empresa.getCiudad().toUpperCase());
                empresa.setColonia(empresa.getColonia().toUpperCase());
                empresa.setDomicilio(empresa.getDomicilio().toUpperCase());
                empresa.setFirmaAcuerdo(empresa.getFirmaAcuerdo().toUpperCase());
                empresa.setMision(empresa.getMision().toUpperCase());
                empresa.setNombre(empresa.getNombre().toUpperCase());
                empresa.setNombreTitular(empresa.getNombreTitular().toUpperCase());
                empresa.setPuestoAcuerdo(empresa.getPuestoAcuerdo().toUpperCase());
                empresa.setRfc(empresa.getRfc().toUpperCase());
                catalogoLN.editarEmpresa(empresa);
                mensajeUsuario(new FacesMessage(FacesMessage.SEVERITY_INFO, "EMPRESA GUARDADA", "LA EMPRESA SE EDITO CORRECTAMENTE"));
                break;
            case "remover":
                for (Proyecto p : catalogoLN.getProyectoPorEmpresa(empresa)) {
                    catalogoLN.removerIntegrantesDeProyecto(catalogoLN.getIntegrantesPorProyecto(p));
                    catalogoLN.removerAsesorsDeProyecto(catalogoLN.getAsesoresPorProyecto(p));
                    catalogoLN.removerProyecto(p);
                }
                catalogoLN.removerEmpresa(empresa);
                mensajeUsuario(new FacesMessage(FacesMessage.SEVERITY_INFO, "EMPRESA REMOVIDA", "LA EMPRESA SE REMOVIO CORRECTAMENTE"));
                break;
        }
        
        if (user.equals("alumno")) {
            return "ProyectoCrearEditar";
        } else {
            return "EmpresaLista";
        }
    }
    
    public String getAccionEmp() {
        return accionEmp;
    }
    
    public void setAccionEmp(String accionEmp) {
        this.accionEmp = accionEmp;
    }
    
    public int getIntegrantes(Proyecto p) {
        if (catalogoLN.getIntegrantesPorProyecto(p) != null) {
            
            return catalogoLN.getIntegrantesPorProyecto(p).size();
        } else {
            
            return 0;
        }
    }
    
    public boolean getProyValido(Proyecto p) {
        if (catalogoLN.getIntegrantesPorProyecto(p) == null) {
            
            return true;
        } else {
            if (catalogoLN.getIntegrantesPorProyecto(p).size() < p.getNumeroIntegrantes()) {
                return true;
            } else {
                return false;
            }
        }
        
    }
    
    public List<String> getCarrerasCon() {
        return connectLN.getCarreras();
        
    }
    
    public String procesarCarrera(FlowEvent e) {
        if (est) {
            String carrera = "";
            for (String ca : carreras) {
                carrera += ca + ", ";
            }
            if (!carrera.isEmpty()) {
                carrera = carrera.substring(0, carrera.lastIndexOf(", "));
                empresa.setCarreras(carrera);
            } else {
                empresa.setCarreras("");
            }
            est = false;
            return "confirmarEmp";
        } else {
            est = true;
            return "crearEmp";
        }
    }
    
    public List<String> getCarreras() {
        return carreras;
    }
    
    public void setCarreras(List<String> carreras) {
        this.carreras = carreras;
    }
    
}
